package cn.broadsense.system.domain;

import cn.broadsense.common.core.domain.BaseEntity;
import cn.broadsense.common.xss.Xss;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.apache.commons.lang3.builder.ToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.Size;

/**
 * 通知公告表 sys_notice
 *
 * @author ruoyi
 */
@Builder
@AllArgsConstructor
@NoArgsConstructor
@ApiModel("系统消息数据")
@Data
public class SysNotice extends BaseEntity {
    private static final long serialVersionUID = 1L;

    /**
     * 公告ID
     */
    @ApiModelProperty("自增主键")
    private Long noticeId;

    /**
     * 公告标题
     */
    @ApiModelProperty("公告标题")
    private String noticeTitle;

    /**
     * 公告类型（1通知 2公告）
     */
    @ApiModelProperty("公告类型，1：通知，2：公告，3：任务通知，4：审核通知")
    private String noticeType;

    /**
     * 公告内容
     */
    @ApiModelProperty("公告内容")
    private String noticeContent;

    /**
     * 公告状态（0正常 1关闭）
     */
    @ApiModelProperty("公告状态，0：正常，1：关闭")
    private String status;


    @ApiModelProperty("关联id")
    private Long relationId;

    @ApiModelProperty("模块，0：默认，1：任务，2：信息")
    private Integer relationModule;

    @ApiModelProperty("关联内容")
    private String relationContent;


    /**
     * 用户ID
     */
    @ApiModelProperty("用户ID")
    private Long userId;

    @ApiModelProperty("已读状态，0：未读，1：已读")
    private Integer readStatus;

    @Xss(message = "公告标题不能包含脚本字符")
    @NotBlank(message = "公告标题不能为空")
    @Size(min = 0, max = 50, message = "公告标题不能超过50个字符")
    public String getNoticeTitle() {
        return noticeTitle;
    }


    @Override
    public String toString() {
        return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
                .append("noticeId", getNoticeId())
                .append("noticeTitle", getNoticeTitle())
                .append("noticeType", getNoticeType())
                .append("noticeContent", getNoticeContent())
                .append("status", getStatus())
                .append("createBy", getCreateBy())
                .append("createTime", getCreateTime())
                .append("updateBy", getUpdateBy())
                .append("updateTime", getUpdateTime())
                .append("remark", getRemark())
                .append("userId", getUserId())
                .append("readStatus", getReadStatus())
                .toString();
    }
}
